lexer grammar AnalizadorFlexLexer;

options {
  language = Java;
 // k = 7;
}


@header{package PL.practica5;}

@members{

ArrayList <RecognitionException> errores = new ArrayList<RecognitionException>();

public boolean listaVacia (){
    if (errores.isEmpty()){
      return true;
    }else
      return false;
}

public ArrayList getListaErrores(){return errores;}


@Override
public void reportError (RecognitionException e){
  System.out.println (getErrorMessage(e, getTokenNames()));
  errores.add(e);
}

}
  RETORNAR : 'return';
  TIPO : 'int' |'char' |'pointer';
  VOID : 'void';
  PRINTF : 'printf';
  fragment NUEVA_LINEA: '\r\n' ;
  BLANCO: (' '|'\t'|NUEVA_LINEA) {skip();};
  fragment DIGITO: '0'..'9';
  fragment LETRA : ('a'..'z')|('A'..'Z')|'_';
  SEPARADOR: ';';
  INCREMENTO : '++';
  DECREMENTO : '--';
  ASTERISCO: '*';
  fragment SUMA : '+';
  fragment RESTA : '-';
  fragment OR : '|';
  fragment AND : '&';
   COMA : ',';
   IGUAL : '=';
  ABRIRCORCHETE : '[';
  CERRARCORCHETE : ']';
  ABRIRLLAVE : '{';
  CERRARLLAVE: '}';
  ABRIRPARENTESIS : '(';
  CERRARPARENTESIS : ')';
  IDENT : LETRA(LETRA|DIGITO)*;
  CADENA : '"' (options {greedy=false;}:.)* '"';
  OPERADORUNITARIOS : ASTERISCO| SUMA | RESTA;
  OPERADORLOGICOS : OR |AND;
  ABRIRVARIABLES : '%{';
  CERRARVARIABLES : '%}';
  NUMERO: (DIGITO)+('.'(DIGITO)+)?;
  SEPARADORBLOQUE : '%%';
  RANGO :  (DIGITO '-'DIGITO | LETRA '-'LETRA)+;
  CORCHETES : ABRIRCORCHETE (RANGO |NUMERO)? CERRARCORCHETE;
  VARIABLEFLEX : ABRIRLLAVE IDENT CERRARLLAVE (ASTERISCO|SUMA)?;
  COMENTARIO: '/*' (options {greedy=false;}:.)* '*/'{skip();};
  

  
